home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Utilities / Programming / Mac F2C 1.2.2 / CodeWarrior Support / For 'Proj Stationary Support' / main.c < prev   
Encoding:
C/C++ Source or Header  |  1995-01-18  |  3.1 KB  |  180 lines  |  [TEXT/MMCC]

  1. /* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */
  2.  
  3. #include "stdio.h"
  4. #include "signal.h"
  5.  
  6. #ifndef SIGIOT
  7. #ifdef SIGABRT
  8. #define SIGIOT SIGABRT
  9. #endif
  10. #endif
  11.  
  12. #if defined(THINK_C) || defined(THINK_CPLUS)
  13. #include <console.h>    /* IMT 2 Dec 94 Needed to make command line work under THINK */
  14. #endif
  15.  
  16. #ifdef __MWERKS__        /* IMT 2 Dec 94 Needed for MetroWerks (from Dirk Froehling) */
  17. #include <SIOUX.h>
  18. #endif
  19.  
  20. #ifndef KR_headers
  21. #include "stdlib.h"
  22. #endif
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26.  
  27. #ifdef NO__STDC
  28. #define ONEXIT onexit
  29. extern void f_exit();
  30. #else
  31. #ifndef KR_headers
  32. extern void f_exit(void);
  33. #ifndef NO_ONEXIT
  34. #define ONEXIT atexit
  35. extern int atexit(void (*)(void));
  36. #endif
  37. #else
  38. #ifndef NO_ONEXIT
  39. #define ONEXIT onexit
  40. extern void f_exit();
  41. #endif
  42. #endif
  43. #endif
  44.  
  45. #ifdef KR_headers
  46. extern void f_init(), sig_die();
  47. extern int MAIN__();
  48. #define Int /* int */
  49. #else
  50. extern void f_init(void), sig_die(char*, int);
  51. extern int MAIN__(void);
  52. #define Int int
  53. #endif
  54.  
  55. static void sigfdie(Int n)
  56. {
  57. sig_die("Floating Exception", 1);
  58. }
  59.  
  60.  
  61. static void sigidie(Int n)
  62. {
  63. sig_die("IOT Trap", 1);
  64. }
  65.  
  66. #ifdef SIGQUIT
  67. static void sigqdie(Int n)
  68. {
  69. sig_die("Quit signal", 1);
  70. }
  71. #endif
  72.  
  73.  
  74. static void sigindie(Int n)
  75. {
  76. sig_die("Interrupt", 0);
  77. }
  78.  
  79. static void sigtdie(Int n)
  80. {
  81. sig_die("Killed", 0);
  82. }
  83.  
  84. #ifdef SIGTRAP
  85. static void sigtrdie(Int n)
  86. {
  87. sig_die("Trace trap", 1);
  88. }
  89. #endif
  90.  
  91.  
  92. /* The following function written by Dirk Froehling; modified by IMT */
  93.  
  94. #if defined(THINK_C) || defined(THINK_CPLUS) 
  95.  
  96. #include <Files.h>
  97. #include <Processes.h>
  98.  
  99.  
  100. static void SetDefVolToAppVol(void)
  101. {
  102.     ProcessSerialNumber    currentPSN;
  103.     ProcessInfoRec        info;
  104.     FSSpec                appSpec;
  105.     
  106.     OSErr                err;
  107.         
  108.     currentPSN.highLongOfPSN = 0;
  109.     currentPSN.lowLongOfPSN = kCurrentProcess;
  110.     info.processInfoLength = sizeof(ProcessInfoRec);
  111.     info.processName = NULL;
  112.     info.processAppSpec = &appSpec;
  113.     err = GetProcessInformation(¤tPSN, &info);
  114.     err = HSetVol(NULL, appSpec.vRefNum, appSpec.parID);
  115. }
  116.  
  117. #endif
  118.  
  119.  
  120.  
  121.  
  122. int xargc;
  123. char **xargv;
  124.  
  125. #ifdef KR_headers
  126. main(argc, argv) int argc; char **argv;
  127. #else
  128. main(int argc, char **argv)
  129. #endif
  130. {
  131.  
  132. #if defined(THINK_C) || defined(THINK_CPLUS) || defined(__MWERKS__)
  133.  
  134.     argc = ccommand( &argv );        /* IMT 2 Dec 94 Think/Codewarrior mod */
  135.  
  136. #endif /* Macintosh C compilers */
  137.  
  138. #if defined(THINK_C) || defined(THINK_CPLUS) 
  139.  
  140.     SetDefVolToAppVol();            /* IMT 14 Dec 94 Thanks to Dirk Froehling */
  141.  
  142. #endif /* Macintosh C compilers */
  143.  
  144. xargc = argc;
  145. xargv = argv;
  146. signal(SIGFPE, sigfdie);    /* ignore underflow, enable overflow */
  147. #ifdef SIGIOT
  148. signal(SIGIOT, sigidie);
  149. #endif
  150. #ifdef SIGTRAP
  151. signal(SIGTRAP, sigtrdie);
  152. #endif
  153. #ifdef SIGQUIT
  154. if(signal(SIGQUIT,sigqdie) == SIG_IGN)
  155.     signal(SIGQUIT, SIG_IGN);
  156. #endif
  157. if(signal(SIGINT, sigindie) == SIG_IGN)
  158.     signal(SIGINT, SIG_IGN);
  159. signal(SIGTERM,sigtdie);
  160.  
  161. #ifdef pdp11
  162.     ldfps(01200); /* detect overflow as an exception */
  163. #endif
  164.  
  165. f_init();
  166. #ifndef NO_ONEXIT
  167. ONEXIT(f_exit);
  168. #endif
  169. MAIN__();
  170. #ifdef NO_ONEXIT
  171. f_exit();
  172. #endif
  173. exit(0);    /* exit(0) rather than return(0) to bypass Cray bug */
  174. return 0;    /* For compilers that complain of missing return values; */
  175.         /* others will complain that this is unreachable code. */
  176. }
  177. #ifdef __cplusplus
  178.     }
  179. #endif
  180.